Sequencer中的Niagara模拟缓存
当你发现模拟结果的算力成本过高时,缓存可以帮助你改善性能,或者锁定序列的特定效果。本指南将介绍如何创建和使用Sequencer中的Niagara缓存功能。
做好准备
要在Sequencer中捕捉和使用模拟缓存,需要先启用NiagaraSimCaching插件。请注意,该插件仍处于试验阶段,之后可能会有变动。
Sequencer缓存
要捕捉Niagara中的模拟结果,有两种不同的方法:
1.在Sequencer中插入缓存轨道,并使用录制功能
2.使用Niagara Actor作为镜头试拍录制器中的源
这两种方法各有优势,下文中会详细说明。
默认设置下,Niagara在Sequencer中的缓存会保存为轨道属性的一部分,不过你也可以自行创建并将其保存为独立资产。当你需要将缓存添加到版本控制,或者处理超大的缓存文件时,保存为单独资产就尤其有用。你也可以在Sequencer中通过烘焙工具或蓝图单独创建。
然后就可以在缓存轨道中使用这些Niagara模拟缓存资产了:
缓存模拟时推荐使用的Sequencer工作流
添加Niagara组件并附带一个生命周期轨道。在生命周期轨道上将“年龄更新模式(Age Update Mode)”设置为“所需年龄(Desired Age)”。
录制缓存之后,它会作为单独的轨道出现在序列中。当使用缓存中的数据而不是运行系统模拟时,该缓存轨道会禁用生命周期轨道并显示状态图标。
要重新启用生命周期轨道,并在序列中迭代效果,可以先将缓存轨道静音(即未激活)。做好修改之后,再取消缓存轨道的静音,然后重新录制。
右键单击缓存轨道,编辑此部分可以更改一系列的属性,例如录制属性、播放速率或缓存反转。
录制缓存之后,你还可以使用“将缓存保存为资产(Save Cache to Asset)”选项,将关卡序列中的数据转移到单独的资产中。这在做版本控制时会尤为有用,因为缓存文件也可能会变得很大。
缓存轨道的大小可通过该片段的句柄进行更改。由于缓存中的帧数是固定的,因此可用于减慢缓存播放速度或重复缓存。你也可以在编辑该片段时修改相应拉伸行为的设置。
轨道选项中的“片段拉伸模式(section stretch mode)”属性也可以改变缓存播放时拉伸片段的方式。
使用缓存轨道直接录制
1.将缓存轨道添加到Niagara组件
2.单击添加的轨道上的录制按钮,捕捉组件的数据
默认情况下,这样只会录制在生命周期轨道时间范围内的数据。如果没有生命周期轨道,缓存则会拉伸至所选序列的播放范围。
这种录制方式有以下优点:
·无需打开镜头试拍录制器即可快速迭代和重新缓存
·在捕捉缓存之前,可以先在轨道上编辑捕捉属性等录制选项
·你可以在片段选项中选择缓存资产,这样录制时就会直接将数据写入资产。使用该选项时还请注意,重新缓存将删除现有的资产数据。前往不要在没有做版本控制的情况下使用。
·使用序列的目标帧率来tick,这样每个模拟帧就都有固定的Delta时间了,而不是变量的编辑器tick。这也是更改缓存中录制的帧数的好办法——只需要在录制缓存前调整序列的目标显示帧率即可。
使用镜头试拍录制器进行录制
录制器可以通过非破坏性的方式来录制数据,因此它在录制时总是会创建新的缓存轨道或关卡序列。
1.首先,添加Niagara Actor作为源
2.选择添加的源时,可以在Actor属性中启用/禁用缓存录制
3.然后点击大红按钮开始录制!
请注意,默认情况下,录制的序列会把Niagara Actor添加为新的可生成(而不是可拥有)资产。如果你只需要看到缓存的版本,请在大纲视图中将原来Niagara Actor的可见性关闭。
这种录制方法的优点是可以同时录制多个源和缓存(不只是Niagara)。
使数据接口可缓存
默认情况下,只有绑定到渲染器的粒子属性才会在录制时写入缓存。当自定义数据接口也需要录制状态来正确显示效果时,可以使用接口
INiagaraSimCacheCustomStorageInterface。
UObject* SimCacheBeginWrite()
bool SimCacheWriteFrame()
bool SimCacheEndWrite()
bool SimCacheReadFrame()
void SimCachePostReadFrame()
TArray GetSimCacheRendererAttributes()
要了解这些接口是如何实现的,可以参考例子UNiagaraDataInterfaceRenderTargetVolume和UNiagaraDataInterfaceHairStrands。
近期焦点